package com.sevici;

import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLConnection;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.Attributes;
import org.xml.sax.InputSource;
import org.xml.sax.XMLReader;

import com.google.android.maps.GeoPoint;
import com.sevici.action.UtilLocaBici;
import com.sevici.model.Distrito;
import com.sevici.model.Estacion;

public class ParsedXMLSevici {

	private List<Estacion> estaciones = null;	
	private List<Distrito> distritos  = null;
	
	private String latitudGenerica = "37.40428540856928"; 
	private String longitudGenerica = "-6.005323827266693";
			
	public ParsedXMLSevici() {
		estaciones = new ArrayList<Estacion>();
		distritos = new ArrayList<Distrito>();
		
	}

	public List<Estacion> getEstaciones() {
		return estaciones;
	}

	public void setEstaciones(List<Estacion> estaciones) {
		this.estaciones = estaciones;
	}

	public List<Distrito> getDistritos() {
		return distritos;
	}

	public void setDistritos(List<Distrito> distritos) {
		this.distritos = distritos;
	}
	public void addEstacion(Attributes atts) {
		Estacion nuevaEstacion = new Estacion();
		nuevaEstacion.setName(atts.getValue("name"));
		nuevaEstacion.setNumber(atts.getValue("number"));
		nuevaEstacion.setAddress(atts.getValue("address"));
		nuevaEstacion.setFullAddress(atts.getValue("fullAddress"));
		nuevaEstacion.setLat(atts.getValue("lat"));
		nuevaEstacion.setLng(atts.getValue("lng"));
		nuevaEstacion.setOpen(atts.getValue("open"));
		nuevaEstacion.setBonus(atts.getValue("bonus"));
		nuevaEstacion = cargaInformacionEstacion(nuevaEstacion);
		nuevaEstacion.setGeoLocalizacion(new GeoPoint(nuevaEstacion.getLatInt(),nuevaEstacion.getLngInt()));
		setEstacion(nuevaEstacion);
		
		
	}
	private void setEstacion(Estacion estacion) {
		this.estaciones.add(estacion);		
	}

	public void addDistrito(Attributes atts) {
		Distrito nuevoDistrito = new Distrito();
		nuevoDistrito.setNumber(atts.getValue("number"));
		nuevoDistrito.setMinLat(atts.getValue("minLat"));
		nuevoDistrito.setMinLng(atts.getValue("minLng"));
		nuevoDistrito.setMaxLat(atts.getValue("maxLat"));
		nuevoDistrito.setMaxLng(atts.getValue("maxLng"));
		setDistrito(nuevoDistrito);
				
	}
	private void setDistrito(Distrito distrito) {
		this.distritos.add(distrito);
		
	}
	public Estacion cargaInformacionEstacion(Estacion estacion){
		String URL = "http://www.sevici.es/service/stationdetails/" + estacion.getNumber();
		try {
			URL url = new URL(URL);
			SAXParserFactory spf = SAXParserFactory.newInstance();
			SAXParser sp = spf.newSAXParser();
			XMLReader xr = sp.getXMLReader();
			
			XMLHandlerDatosEstacion misDatosEstacion = new XMLHandlerDatosEstacion();						
			xr.setContentHandler(misDatosEstacion);
			//forma de recoger si se ha modificado la URL 
			URLConnection urlC = url.openConnection();
			Long date = urlC.getDate();
			Date dia = new Date(date);			
			
			xr.parse(new InputSource(url.openStream()));
			
			estacion.setAvailable(misDatosEstacion.getAvailable());
			estacion.setFree(misDatosEstacion.getFree());
			estacion.setTotal(misDatosEstacion.getTotal());
			estacion.setTicket(misDatosEstacion.getTicket());			
					
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return estacion;
		
	}

	public String toString(){
		String stringADevolver = "";
		UtilLocaBici utilLocabici = new UtilLocaBici();
		Estacion estacionGenerica = new Estacion(latitudGenerica,longitudGenerica );
		for (Estacion estacion : estaciones){
			stringADevolver += "Estacion : " +  estacion.getNumber() + "Disponibles :  " + estacion.getFree()+ "\n" + utilLocabici.dameDistacia(estacion, estacionGenerica );			
		}
		return stringADevolver;
	}
	 	
}
